﻿/**
 * @file applanguagecontroller.h
 * @author huangxb
 * @email 18228033207@163.com
 * @date 2024.04.04
 * @license MIT License
 * @brief 多语种管理类.
 *
 * @htmlonly
 * <span style="font-weight: bold">History</span>
 * @endhtmlonly
 * Version|Auther|Date|Describe
 * ------|----|------|--------
 * V1.0|huangxb|2024.04.04|创建
 */
#ifndef CAPPLANGUAGECONTROLLER_H
#define CAPPLANGUAGECONTROLLER_H

/* 自定义头文件 */
#include "singletont.h"
/* 库头文件*/
#include <QObject>

/* 前置声明 */
class QTranslator;

/** @brief 语言枚举 */
enum EAppLanguage
{
    EAL_ZH_CN = 0, /**< 中文 */
    EAL_EN_US, /**< 英文 */
    EAL_UNKNOWN = 10000, /**< 未知 */
};

/** @brief 多语种管理类. */
class CAppLanguageController
    : public QObject
    , public CSingleTonT<CAppLanguageController>
{
    Q_OBJECT

private:
    friend class CSingleTonT<CAppLanguageController>;

    QTranslator* m_pCurTranslator = nullptr; /**< 当前语言翻译类 */
    EAppLanguage m_nCurLanguage = EAL_UNKNOWN; /**< 当前语言类型 */

public:
    /**
     * @brief 改变当前语种.
     * @param[in] nLang 语种
     * @return 成功或失败
     */
    bool ChangeLanguage(EAppLanguage nLang);

    /**
     * @brief 改变当前语种.
     * @param[in] nLang 语种
     * @param[in] filePath 翻译文件路径
     * @return 成功或失败
     */
    bool ChangeLanguage(EAppLanguage nLang, const QString& filePath);

    /**
     * @brief 获取当前语言类型.
     * @return 语言
     * @see EAppLanguage
     */
    EAppLanguage GetAppLanguage() const;

    /**
     * @brief 是否是中文环境.
     * @return 是或否
     */
    bool IsChinese() const;

private:
    /**
     * @brief 构造函数.
     * @param[in] parent 父对象
     */
    explicit CAppLanguageController(QObject *parent = nullptr);
    /** @brief 析构函数 */
    ~CAppLanguageController();

signals:
    void LanguageChanged();
};

/**
 * @brief 获取CAppLanguageController的单例对象.
 * @return 单例对象
 */
inline CAppLanguageController* AppLanguageController()
{
    return CAppLanguageController::GetInstance();
}

#endif // CAPPLANGUAGECONTROLLER_H
